package main

import (
	"fmt"
	"math/rand"
	"time"
)

// 1、打印九九乘法表。如果可以要求间隔均匀。
func f1() {
	// 打印行，共打印 9 行
	for h := 1; h < 10; h++ {
		// 打印列，列每次从 1 开始，值不能大于行
		for l := 1; l <= h; l++ {
			// 定位前 4 行的前 2 列，加空格补齐间隔
			if 1 < l && l < 3 && h < 5 {
				fmt.Printf("%d*%d=%d  ", l, h, l*h)
			} else {
				fmt.Printf("%d*%d=%d ", l, h, l*h)
			}
		}
		fmt.Println()
	}
}

// 2、随机生成 20 以内的 20 个非 0 正整数，打印出来。对生成的数值，第单数个（不是索引）累加求和，第偶数个累乘求积。打印结果
func f2() {
	// rand 包使用方法：https://pkg.go.dev/math/rand#pkg-overview
	// 设置种子为时间纳秒值。注意：使用固定种子将在每次运行中产生相同的输出结果。
	seed := time.Now().UnixNano()
	// 使用种子生成随机数源
	src := rand.NewSource(seed)
	// 使用随机数源创建随机数生成器
	r := rand.New(src)
	j, k := 0, 1
	for i := 1; i < 21; i++ {
		num := r.Intn(19) + 1
		fmt.Printf("%d ", num)
		// 位与结果为 1 的是单数位置，反之为偶数位置。
		if i&1 == 1 {
			j += num
		} else {
			k *= num
		}
	}
	fmt.Printf("\n第单数个累加求和：%d\n第偶数个累乘求积：%d \n", j, k)
}

// 3、打印 100 以内的斐波那契数列（该数列的特点是后一个数字，永远都是前 2 个数字之和）
func f3() {
	a, b := 0, 1
	for b < 100 {
		// 计算斐波那契数
		a, b = b, a+b
		// 打印斐波那契数
		fmt.Printf("%d ", b)
	}
}
func main() {
	f1()
	f2()
	f3()
}

// 阿飞老师的批改
// 1. 最后一题打印的数值范围超出要求
